public class Model_Charlie extends Model
{
    Figur[]figuren;

    public Model_Charlie(){
        super ();
        figuren = new Figur [16];

    }

    public void startZustand(){
        figuren[0]= new Figur(-10);
        view.figurAnzeigen(-10, 1);
        figuren[1]= new Figur(-20);
        view.figurAnzeigen(-20, 1);
        figuren[2]= new Figur(-30);
        view.figurAnzeigen(-30, 1);
        figuren[3]= new Figur(-40);
        view.figurAnzeigen(-40, 1);
        figuren[4]= new Figur(-50);
        view.figurAnzeigen(-50, 2);
        figuren[5]= new Figur(-60);
        view.figurAnzeigen(-60, 2);
        figuren[6]= new Figur(-70);
        view.figurAnzeigen(-70, 2);
        figuren[7]= new Figur(-80);
        view.figurAnzeigen(-80, 2);
        figuren[8]= new Figur(-90);
        view.figurAnzeigen(-90, 3);
        figuren[9]= new Figur(-100);
        view.figurAnzeigen(-100, 3);
        figuren[10]= new Figur(-110);
        view.figurAnzeigen(-110, 3);
        figuren[11]= new Figur(-120);
        view.figurAnzeigen(-120, 3);
        figuren[12]= new Figur(-130);
        view.figurAnzeigen(-130, 4);
        figuren[13]= new Figur(-140);
        view.figurAnzeigen(-140, 4);
        figuren[14]= new Figur(-150);
        view.figurAnzeigen(-150, 4);
        figuren[15]= new Figur(-160);
        view.figurAnzeigen(-160, 4);
    }

    public void spielZustand(){

        this.startZustand();
        this.ausHausRaus(0);
    }

    public boolean figurLaeuft(int figurnr, int strecke){

        //if (figuren[figurnr].feldGeben() >= 0){
        int aktuellesFeld = figuren[figurnr].feldGeben();
        int zielfeld = aktuellesFeld + strecke;

        //if (figuren[figurnr].gelaufeneFelder()>40) insZielhaus(figurnr);
        if (zielfeld>=40)
        {
            zielfeld = zielfeld - 40;
        }

        if (feldBelegt(zielfeld) == -1){

            int spieler = gehoertSpieler(figurnr);
            figuren[figurnr].istGelaufen(strecke);
            figurSetzen(zielfeld, spieler);
            figurSetzen(aktuellesFeld, -1);
            return true;

        }
        else
        {
            if (feldBelegt(zielfeld) == gehoertSpieler(figurnr)) //auf Zielfeld steht schon eigene Figur
            {
                view.kommentarAnzeigen("Zug nicht möglich! Andere Figur wählen!"); 
                return false;
            }
            else  //´kann dann nur noch Figur eines anderen Spielers sein 
            {
                schlagen(figurnr,strecke);
                return true;
            }
        }
        // }
        //else{
        //   ausHausRaus(figurnr);
        //   return true;
        // }

    }

    // public void insZielhaus(int figurnr)
    //{
    //int zielstrecke = figuren[figurnr].gelaufeneFelder()-40;
    // int spieler = controller.spielerGeben();
    // if (spieler ==1 && zielstrecke ==1);
    //}

    boolean zugUeberpruefen(int figurnr, int strecke){
        int aktuellesFeld = figuren[figurnr].feldGeben();
        int zielfeld = strecke + aktuellesFeld;
        if (zielfeld>=40)
        {
            zielfeld = zielfeld - 40;
        }

        if (feldBelegt(zielfeld) == -1 || feldBelegt(zielfeld) != gehoertSpieler(figurnr)){
            return true;
        }
        else{
            return false;
        }

    }

    void zugAusfuehren(int figurnr, int strecke){
        int aktuellesFeld = figuren[figurnr].feldGeben();
        int zielfeld = aktuellesFeld + strecke;
        if (zielfeld>=40)
        {
            zielfeld = zielfeld - 40;
        }

        int spieler = gehoertSpieler(figurnr);
        System.out.println("" +aktuellesFeld+ ""+zielfeld);

        figuren[figurnr].istGelaufen(strecke);
        figurSetzen(zielfeld, spieler);
        figurSetzen(aktuellesFeld, -1);
    }

    public void figurSetzen(int feldnr, int spieler) 
    {
        view.figurAnzeigen(feldnr, spieler);
    }

    public int gehoertSpieler (int figurnr){
        int spieler = 0;
        if (figurnr >= 0 && figurnr <= 3)
        {
            spieler = 1;
        }
        if (figurnr >= 4 && figurnr <= 7)
        {
            spieler = 2;
        }
        if (figurnr >= 8 && figurnr <= 11)
        {
            spieler = 3;
        }
        if (figurnr >= 12 && figurnr <= 15)
        {
            spieler = 4;
        }
        return spieler;
    }

    public int feldBelegt (int feldnr){
        for (int i=0; i<=15; i++)
        {
            if (figuren[i].feldGeben()== feldnr){
                return gehoertSpieler(i);
            }
        }
        return -1; // Hr Rau hat gesagt das geht :)        
    }

    public void schlagen (int figurnr, int strecke) {
        int aktuellesFeld = figuren[figurnr].feldGeben();
        int zielfeld = aktuellesFeld + strecke;
        if (zielfeld>=40)
        {
            zielfeld = zielfeld - 40;
        }

        int geschlagenerSpieler = gehoertSpieler(figurAufFeld(zielfeld));
        int schlagenderSpieler = gehoertSpieler (figurAufFeld(aktuellesFeld));
        for (int i=0; i<=15; i++){
            if (figuren[i].feldGeben()== zielfeld){
                figuren[i].wurdeGeschlagen();
                view.figurAnzeigen(figuren[i].startfeldGeben(),geschlagenerSpieler);
                view.kommentarAnzeigen ("Spieler" + i + "geschlagen");
                //neue Methode in Figur, startfeldGeben
            }
        }
        figuren[figurnr].istGelaufen(strecke);
        view.figurAnzeigen(zielfeld,schlagenderSpieler);
        view.figurAnzeigen(aktuellesFeld,-1);
        //fertig!
    }

    public void ausHausRaus (int figurnr){
        int aktuellesFeld = figuren[figurnr].feldGeben();

        int zielfeld = 0;
        // if (true || controller.wuerfelErgebnisGeben()==6) //Bedingung kann eigtl ganz weggelassen werden, da Controller diese Methode nur dann aufruft, wenn er weiss, dass 6 gewuerfelt ist (Hr. Rau)
        // {

        if (gehoertSpieler(figurnr) == 1){
            zielfeld = 0;

            // view.figurAnzeigen (0, 1);
        }
        else if (gehoertSpieler(figurnr) == 2){
            zielfeld = 10;
        }  
        else if (gehoertSpieler(figurnr) == 3){
            zielfeld = 20;
        }  
        else if (gehoertSpieler(figurnr) == 4){
            zielfeld = 30;
        }
        //if (gehoertSpieler(figurAufFeld(zielfeld))=! -1 && gehoertSpieler(figurAufFeld(zielfeld)) =! controller.spielerGeben())
        //{
            int geschlagenerSpieler = gehoertSpieler(figurAufFeld(zielfeld));
            for (int i=0; i<=15; i++){
                if (figuren[i].feldGeben()== zielfeld){
                    figuren[i].wurdeGeschlagen();
                    view.figurAnzeigen(figuren[i].startfeldGeben(),geschlagenerSpieler);
                    view.kommentarAnzeigen ("Spieler" + i + "geschlagen");
                    //neue Methode in Figur, startfeldGeben
                }
            }
        //}
        view.figurAnzeigen (aktuellesFeld, -1);
        figuren[figurnr].feldSetzen(zielfeld);
        view.figurAnzeigen(zielfeld, gehoertSpieler(figurnr));
        int spieler = gehoertSpieler (figurnr);
        view.figurAnzeigen(zielfeld,spieler);
        // }

        // --> HIER weiterarbeiten, 1.7.15, feldsetzen in figur
    }

    public int figurAufFeld (int feldnr){
        for (int i=0; i<=15; i++)
        {
            if (figuren[i].feldGeben()== feldnr){
                return i;
            }
        }
        return -1; // Hr Rau hat gesagt das geht :)
    }

    public  int feldGeben(int figurnr){
        return figuren[figurnr].feldGeben();
    }

    //   public void infoAnView(){
    //   }

}
